<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

namespace Common\Api;
class ModelApi
{
    /**
     * 获取文档模型信息
     * @param  integer $id 模型ID
     * @param  string $field 模型字段
     * @return array
     */
    public static function get_document_model($id = null, $field = null)
    {
        static $list;

        /* 非法分类ID */
        if (!(is_numeric($id) || is_null($id))) {
            return '';
        }

        /* 读取缓存数据 */
        if (empty($list)) {
            $list = S('DOCUMENT_MODEL_LIST');
        }

        /* 获取模型名称 */
        if (empty($list)) {
            $map = array('status' => 1);
            $model = M('model')->where($map)->field(true)->select();
            foreach ($model as $value) {
                $list[$value['id']] = $value;
            }
            S('DOCUMENT_MODEL_LIST', $list); //更新缓存
        }

        /* 根据条件返回数据 */
        if (is_null($id)) {
            return $list;
        } elseif (is_null($field)) {
            return $list[$id];
        } else {
            return $list[$id][$field];
        }
    }

    // 获取模型名称
    public static function get_model_by_id($id)
    {
        return $model = M('model')->getFieldById($id, 'title');
    }

    /**
     * 获取属性信息并缓存
     * @param  integer $id 属性ID
     * @param  string $field 要获取的字段名
     * @return string         属性信息
     */
    public static function get_model_attribute($model_id)
    {
        static $list;

        /* 非法ID */
        if (empty($model_id) || !is_numeric($model_id)) {
            return '';
        }

        /* 读取缓存数据 */
        if (empty($list)) {
            $list = S('attribute_list');
        }

        /* 获取属性 */
        if (!isset($list[$model_id])) {
            $map = array('model_id' => $model_id);
            $info = M('attribute')->where($map)->select();
            $list[$model_id] = $info;
            //S('attribute_list', $list); //更新缓存
        }

        $attr = array();
        foreach ($list[$model_id] as $value) {
            $attr[$value['name']] = $value;
        }

        return $attr;
    }

    // 分析属性的枚举类型字段值 格式 a:名称1,b:名称2 或者 :fun(var1,var)
    public static function parse_field_attr($string)
    {
        if (0 === strpos($string, ':')) {
            // 采用函数定义
            return eval(substr($string, 1) . ';');
        }
        $array = preg_split('/[,;\r\n]+/', trim($string, ",;\r\n"));
        if (strpos($string, ':')) {
            $value = array();
            foreach ($array as $val) {
                list($k, $v) = explode(':', $val);
                $value[$k] = $v;
            }
        } else {
            $value = $array;
        }
        return $value;
    }
}